In traditional object-oriented programming environments, the incorporation of new functionality into an existing object model involved the hand generation of extensive quantities of software code specifically defining the implementation of the new functionality—e.g., one or more additional object classes encapsulating the desired functionality—and integrating that implementation into the existing object model. To do so typically required the application developer to assess user needs, evaluate the impact of any proposed change on hardware and software system components and implement changes at the source code level, using object-oriented programming languages such as C++. This process placed the extension of an existing object model squarely in the hands of the application developer, requiring a level of programming knowledge beyond the reach of many application users.
More recently, the introduction of integrated development environments that are directly embedded into a software application such as Microsoft's Visual Basic® for Applications (VBA) has simplified the process of application customization and extension for the end user. VBA includes both host and standalone project types that an end user can create. Host projects allow the end user to extend the object model of an application, but the extensions are limited to objects that are tightly coupled to the GUI instance of the application and the VBA IDE. As a result, such objects cannot be publicly created separate from the specific application instance. Also the mechanisms involved do not provide for easily adding new templated classes to the object model for extension by the end user and do not assist the user in integrating new instances into an instance of an existing object model.
VBA 6.x,, available from Microsoft Corporation, includes a multithreading capability (VBAMT) that allows the developer to create multithreaded projects, i.e., projects containing multiple threads that can execute concurrently. These projects are “standalone” in that the code that executes is not tightly coupled to the GUI instance of the application that hosts the VBA IDE. The process begins with a host application that registers one or more multithreading (“MT”) project types. Using these registered project types and an ActiveX VBA MT Designer, users of the application can create multithreaded projects, which are compiled and published as stand-alone DLLs.
A published MT project DLL can be used by other multithreaded host applications. To do so, a thread creates an instance of a VBA MT runtime object and an instance of a global application object associated with the MT project, against which the MT project executes code. The VBA MT runtime object is initialized through the IVbaMT interface, which loads all registered MT project DLLs. The collection of loaded MT project DLLs can be accessed through the IVbaMTDlls interface. Any number of threads can use an MT project DLL concurrently.
When a new MT project is created, a design instance of the MT Designer is created and associated with a logical group of threads. The user can then add classes, forms, and modules to the project. However, VBA MT provides that these classes are not publicly creatable outside of the VBA environment. Nor are these classes instances of the templated objects of an object model. The VBAMT capability provides no mechanisms to assist the end user with integrating a VBAMT project object into an enterprise wide application with a minimum of knowledge by the end user of the specifics of how to integrate into the enterprise environment.
VBA does allow the public creation of an ActiveX designer instance from a standalone project, but ActiveX designers require high-level programming skill and still do not provide the convenient object model integration support that a typical end user would require.